﻿/**
 * @brief 数据通道接口，用来统一数据操作接口。
 *    其中涉及到错误编号的时候，当错误编号小于0的时候是错误编号，等于0的时候是没有发生错误
 * @version 1.0
 * @date 2020-10-11
 * @author 宋炜
*/
#ifndef DCITFC_HPP
#define DCITFC_HPP

#include <string>
#include <functional>

struct dcItfc
{
	virtual void connect( const std::string& url , bool bind = false ) = 0;
	virtual void send( const char * data , size_t len ) = 0;
	virtual void close() = 0;
	virtual void onRecv( const char * data , size_t len ) = 0;
	virtual void onError( int err ) = 0;
	virtual void onConnected() = 0;
	virtual void onDisconnected() = 0;
	virtual void onClose() = 0;
	virtual void onSend( int err ) = 0;
	virtual void onClientConnected() = 0;

	virtual const std::string type() const = 0;

	virtual void evtError( std::function< void ( int err ) > fun ) = 0;
	virtual void evtConnected( std::function< void () > fun ) = 0;
	/**
	 * @brief 对于服务器有效
	 * @param fun
	 */
	virtual void evtClientConnected( std::function< void (const std::string& ) > fun ) = 0;
	virtual void evtClientDisconnected( std::function< void ( const std::string& )> fun ) = 0;
	virtual void evtClosed( std::function< void ( ) > fun ) = 0;
	virtual void evtRecv( std::function< void ( const char * data , size_t len )> fun ) = 0;
	virtual void evtSend( std::function< void ( int err ) > fun ) = 0;
	/**
	 * @brief 对于服务器有效.用于关闭监听
	 * @param fun
	 */
	virtual void evtStop( std::function< void ()> fun ) = 0;
};

#endif // DCITFC_HPP
